home *** CD-ROM | disk | FTP | other *** search
/ PsL Monthly 1993 December / PSL Monthly Shareware CD-ROM (December 1993).iso / prgmming / dos / asm / pc370_3.exe / lha / SIEVE.ALC < prev    next >
Text File  |  1987-05-21  |  4KB  |  161 lines

  1.     TITLE 'SIEVE.ALC - FIND PRIME NUMBERS USING SIEVE'
  2. *
  3. * AUTHOR. DON HIGGINS.
  4. * DATE.   12/19/86.
  5. * REMARKS. LIST PRIMES ENDING IN 999 UP TO 100,000 (MAXPRIME VALUE)
  6. *          USING 100,000 BYTE TABLE AND SIEVE ROUTINE
  7. *
  8. * 01/16/87 MODIFY TO USE BXLE AND CLCL SCAN FOR NEXT PRIME
  9. * 03/01/87 MODIFY TO USE GMAIN INSTEAD OF DIRECT FQE ACCESS
  10. * 05/20/87 UPDATE TIMINGS FOR PC/370 R2.0
  11. *
  12. SIEVE    CSECT
  13.     LR    BASE,ENTRY
  14.     USING SIEVE,BASE
  15.     LA    R2,=C' $'
  16.     SVC   WTO
  17.     LA    R2,=C'SIEVE.ALC PROGRAM TO PRINT PRIMES ENDING$'
  18.     SVC   WTO
  19.     LA    R2,=C'IN 999 UP TO 100,000 USING 100,000 BYTE TABLE$'
  20.     SVC   WTO
  21.     LA    R2,=C'AND SIEVE ROUTINE. START AND ENDING TIME,$'
  22.     SVC   WTO
  23.     LA    R2,=C'AND 370 INSTRUCTION COUNT ARE ALSO PRINTED.$'
  24.     SVC   WTO
  25.     LA    R2,=C'TIME = 176 SECONDS ON  4.77 MHZ  8088 PC.$'
  26.     SVC   WTO
  27.     LA    R2,=C'TIME =  63 SECONDS ON  6    MHZ 80286 PC/AT.$'
  28.     SVC   WTO
  29.     LA    R2,=C'TIME =  37 SECONDS ON 10    MHZ 80286 PS/2-50.$'
  30.     SVC   WTO
  31.     LA    R2,=C'TIME =  31 SECONDS ON 12    MHZ 80286 COMPAQ.$'
  32.     SVC   WTO
  33.     LA    R2,=C'TIME =  20 SECONDS ON 16    MHZ 80386 COMPAQ.$'
  34.     SVC   WTO
  35.     LA    R2,=C' $'
  36.     SVC   WTO
  37.     L     ENTRY,=V(PET)
  38.     BALR  LINK,ENTRY     PRINT STARTING TIME
  39.     BAL   LINK,INIT      INIT REGS AND TABLE WITH 2,3 MARKED
  40.     LA    NUMBER,5
  41.     LA    NEXT,999       NEXT TARGET NUMBER WITH 999'S
  42. MAINLOOP EQU   *
  43.     BAL   LINK,MARKDUP   MARK DUPLICATES OF NUMBER
  44.     BAL   LINK,FINDNEXT  FIND NEXT PRIME
  45.     BZ    MAINEOJ        EXIT IF NONE FOUND
  46.     CLR   NUMBER,NEXT
  47.     BL    MAINLOOP       LOOP IF NUMBER < NEXT TARGET
  48.     LA    NEXT,1000(NEXT)
  49.     BNE   CHKEOJ
  50.     BAL   LINK,PRTNUM    PRINT NUMBER IF EQUAL TO TARGET
  51. CHKEOJ   EQU   *
  52.     CL    NUMBER,=A(MAXPRIME)
  53.     BL    MAINLOOP       LOOP IF NUMBER < MAXPRIME
  54. MAINEOJ  EQU   *
  55.     L     ENTRY,=V(PET)
  56.     BALR  LINK,ENTRY    PRINT ENDING TIME
  57.     SVC   EXIT
  58.     TITLE 'INIT - INITIALIZE TABLE WITH PRIME INDICATORS'
  59. INIT     EQU   *
  60.     L     R1,=A(MAXPRIME)
  61.     SVC   GMAIN   ALLOCATE TABLE FROM FREE MEMORY
  62.     LTR   R0,R0
  63.     BNZ   INITERR
  64.     LR    TABS,R2
  65.     LR    TABE,R2
  66.     A     TABE,=A(MAXPRIME)
  67.     MVC   0(6,TABS),INITDATA
  68.     LRA   R3,0(TABS)
  69.     L     R2,=A(MAXPRIME-6)
  70.     MVCP  6(R2,TABS),0,R3  INIT TABLE WITH 2,3 DUP. MARKED
  71.     BR    LINK
  72. INITERR  EQU   *
  73.     LA    R2,=C'INSUFFICIENT MEMORY FOR TABLE$'
  74.     SVC   WTO
  75.     SVC   TRACE
  76.     DC    C'BUG '
  77.     SVC   EXIT
  78.     TITLE 'PRTNUM - PRINT PRIME NUMBER'
  79. PRTNUM   EQU   *
  80.     CVD   NUMBER,PWORK
  81.     MVC   DNUM,DMASK
  82.     ED    DNUM,PWORK+4
  83.     LA    R2,DNUM
  84.     SVC   WTO
  85.     BR    LINK
  86.     TITLE 'MARKDUP - MARK DUPLICATES IN TABLE'
  87. MARKDUP  EQU   *
  88.     LA    DUP,0(NUMBER,TABS)
  89.     BXH   DUP,NUMBER,MARKEXIT  EXIT IF DUP > TABE
  90. MARKLOOP EQU   *
  91.     MVI   0(DUP),NOTPRIME
  92.     BXLE  DUP,NUMBER,MARKLOOP  LOOP IF DUP <= TABE
  93. MARKEXIT EQU   *
  94.     BR    LINK
  95.     TITLE 'FINDNEXT - FIND NEXT PRIME IN TABLE'
  96. FINDNEXT EQU   *
  97.     LA    R0,1(NUMBER,TABS)
  98.     LR    R1,TABE
  99.     SR    R1,R0
  100.     BNH   FINDEOF  EOF IF SCAN LENGTH NOT > 0
  101.     LM    R2,R3,=A(0,NOTPRIME*X'1000000')
  102.     CLCL  R0,R2    SCAN FOR NEXT PRIME
  103.     BE    FINDEOF  EOF IF NO PRIME FOUND
  104.     SR    R0,TABS
  105.     LR    NUMBER,R0
  106.     BR    LINK  EXIT WITH NZ FOR PRIME
  107. FINDEOF  EQU   *
  108.     SR    R0,R0 FORCE ZERO CC FOR END OF TABLE
  109.     BR    LINK
  110.     TITLE 'COMMON DATA'
  111.     LTORG
  112. *
  113. *  SVC'S
  114. *
  115. EXIT     EQU   0
  116. TRACE    EQU   9
  117. GMAIN    EQU   10   R1=LENGTH, R2=ADDRESS, R0=RC (0=OK)
  118. WTO      EQU   209
  119. *
  120. *  REGISTERS
  121. *
  122. R0       EQU   0
  123. R1       EQU   1
  124. R2       EQU   2
  125. R3       EQU   3
  126. DUP      EQU   4
  127. TABS     EQU   5
  128. NUMBER   EQU   6   R6/R7 USED IN BXLE/BXH
  129. TABE     EQU   7
  130. TWO      EQU   9
  131. NEXT     EQU   10
  132. BASE     EQU   12
  133. LINK     EQU   14
  134. ENTRY    EQU   15
  135. *
  136. * DATA
  137. *
  138. MAXPRIME EQU   100000 (100,000=200 SEC, 10,000=20 SEC FOR QUICK TEST)
  139. PRIME    EQU   0
  140. NOTPRIME EQU   1
  141. PWORK    DC    D'0'
  142. DMASK    DC    X'40206B2020206B202020'
  143. DNUM     DC    CL10' Z,ZZZ,ZZZ',C'$'
  144. *
  145. * INITDATA ELIMINATES 2'S AND 3'S FROM TABLE
  146. *
  147. INITDATA DC    AL1(NOTPRIME,PRIME,NOTPRIME,NOTPRIME,NOTPRIME,PRIME)
  148. *
  149. *  DSECTS
  150. *
  151. ASCB     DSECT
  152. ASCBIDR  DS    CL4
  153. ASCBNEXT DS    A     NEXT ASCB  OR ZERO
  154. ASCBPREV DS    A     PREVIOUS ASCB OR ZERO
  155. ASCBASO  DS    A     VIRTUAL ADDRESS SPACE ORIGIN
  156. ASCBASL  DS    A     VIRTUAL ADDRESS SPACE LENGTH
  157. ASCBASF  DS    A     RELATIVE ADDRESS OF FREE SPACE QUEUE OR ZERO
  158. ASCBASE  DS    A     RELATIVE ADDRESS OF ENTRY POINT USED BY ATTACH
  159. ASCBEXIT DS    A     RELATIVE ADDRESS OF EXIT IN PREV. ADDR. SPACE
  160.     END   SIEVE
  161.